在 IIS 上托管 Angular 应用程序 - 重定向到 root 并强制使用 HTTPS
Host Angular app on IIS - Redirect to root and force HTTPS
我有一个 angular 应用程序托管在 IIS 中。为了将所有请求重定向到应用程序的根目录并允许 angular 路由处理不同的路由,我添加了一个带有 URL 重写规则的 web.config 文件,如下所示如下:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Angular Routes" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
它工作正常。但是,我现在需要强制应用程序从 HTTP 重定向到 HTTPS。为此,我可以添加一条新规则,如下 post 所示: Angular 2 - 始终重定向到 https:// 而不是使用 http://
强制使用 HTTPS 的规则:
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Redirect to https" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
这条规则也有效,但它打破了我之前定义的重定向到根规则。那么有没有人知道我如何将这两个规则混合在一起或者我可以通过哪种其他方式实现这两个目的?
作为替代解决方案,我最终直接在 angular 项目的主控制器上强制使用 https,如下所示。 (张贴以防对其他人有用)
import { Component, OnInit } from '@angular/core';
import { Location } from '@angular/common';
import { environment } from '../environments/environment';
@Component({
selector: 'vp-app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
title = 'vp-app';
location: Location;
ngOnInit() {
if (environment.production) {
if (location.protocol === 'http:') {
window.location.href = location.href.replace('http', 'https');
}
}
}
}
重定向到 HTTPS 并重定向到 ROOT
仍在寻找 web.config 解决方案的人,将您现有的 web.config 文件代码替换为以下代码:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<!--START REDIRECT TO HTTPS-->
<rule name="Redirect to https" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
</rule>
<!--END REDIRECT TO HTTPS-->
<!--START REDIRECT TO ROOT-->
<rule name="AngularJS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
<!--END REDIRECT TO ROOT-->
</rules>
</rewrite>
</system.webServer>
</configuration>
注:
对于 IIS 6,您可能需要安装 URL Rewrite 扩展才能使其正常工作。
您可以在以下位置找到 URL 重写扩展:https://www.iis.net/downloads/microsoft/url-rewrite
我有一个 angular 应用程序托管在 IIS 中。为了将所有请求重定向到应用程序的根目录并允许 angular 路由处理不同的路由,我添加了一个带有 URL 重写规则的 web.config 文件,如下所示如下:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Angular Routes" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
它工作正常。但是,我现在需要强制应用程序从 HTTP 重定向到 HTTPS。为此,我可以添加一条新规则,如下 post 所示: Angular 2 - 始终重定向到 https:// 而不是使用 http://
强制使用 HTTPS 的规则:
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Redirect to https" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
这条规则也有效,但它打破了我之前定义的重定向到根规则。那么有没有人知道我如何将这两个规则混合在一起或者我可以通过哪种其他方式实现这两个目的?
作为替代解决方案,我最终直接在 angular 项目的主控制器上强制使用 https,如下所示。 (张贴以防对其他人有用)
import { Component, OnInit } from '@angular/core';
import { Location } from '@angular/common';
import { environment } from '../environments/environment';
@Component({
selector: 'vp-app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
title = 'vp-app';
location: Location;
ngOnInit() {
if (environment.production) {
if (location.protocol === 'http:') {
window.location.href = location.href.replace('http', 'https');
}
}
}
}
重定向到 HTTPS 并重定向到 ROOT
仍在寻找 web.config 解决方案的人,将您现有的 web.config 文件代码替换为以下代码:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<!--START REDIRECT TO HTTPS-->
<rule name="Redirect to https" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
</rule>
<!--END REDIRECT TO HTTPS-->
<!--START REDIRECT TO ROOT-->
<rule name="AngularJS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
<!--END REDIRECT TO ROOT-->
</rules>
</rewrite>
</system.webServer>
</configuration>
注: 对于 IIS 6,您可能需要安装 URL Rewrite 扩展才能使其正常工作。
您可以在以下位置找到 URL 重写扩展:https://www.iis.net/downloads/microsoft/url-rewrite